RowMapper
স্প্রিং জেডিবিসি (Spring JDBC)-তে ব্যবহৃত একটি ইন্টারফেস, যা ডাটাবেস থেকে প্রাপ্ত রেকর্ডকে কাস্টম অবজেক্টে ম্যাপ করার জন্য ব্যবহৃত হয়। এটি ডেটাবেসের একটি রো-কে জাভা অবজেক্টে রূপান্তর করার জন্য খুবই কার্যকর।
@FunctionalInterface
public interface RowMapper<T> {
T mapRow(ResultSet rs, int rowNum) throws SQLException;
}
RowMapper
ইন্টারফেসের একটি mapRow()
মেথড আছে, যা ডাটাবেস থেকে প্রতিটি রেকর্ডকে প্রসেস করে এবং জাভা অবজেক্ট তৈরি করে।
RowMapper
ব্যবহার করে একটি টেবিল থেকে ডেটা পড়াধরুন, আমাদের একটি users
নামক টেবিল আছে:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);
public class User {
private int id;
private String name;
private String email;
// Constructor
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@Service
public class UserService {
private final JdbcTemplate jdbcTemplate;
public UserService(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<User> getAllUsers() {
String sql = "SELECT * FROM users";
// Using RowMapper
return jdbcTemplate.query(sql, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
return new User(
rs.getInt("id"),
rs.getString("name"),
rs.getString("email")
);
}
});
}
}
Lambda
দিয়ে সহজ পদ্ধতিতে RowMapper:RowMapper-এর lambda
এক্সপ্রেশন ব্যবহার করা যেতে পারে:
public List<User> getAllUsers() {
String sql = "SELECT * FROM users";
return jdbcTemplate.query(sql, (rs, rowNum) -> new User(
rs.getInt("id"),
rs.getString("name"),
rs.getString("email")
));
}
ধরুন, আমরা একটি নির্দিষ্ট id
এর ভিত্তিতে User
পড়তে চাই:
public User getUserById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, (rs, rowNum) -> new User(
rs.getInt("id"),
rs.getString("name"),
rs.getString("email")
));
}
আপনার যদি একই টেবিলের জন্য বারবার RowMapper ব্যবহার করতে হয়, তাহলে কাস্টম RowMapper
তৈরি করুন:
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CustomUserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
return new User(
rs.getInt("id"),
rs.getString("name"),
rs.getString("email")
);
}
}
public List<User> getAllUsers() {
String sql = "SELECT * FROM users";
return jdbcTemplate.query(sql, new CustomUserRowMapper());
}
@SpringBootApplication
public class SpringJdbcExampleApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(SpringJdbcExampleApplication.class, args);
UserService userService = context.getBean(UserService.class);
// Add some users
userService.addUser("Alice", "alice@example.com");
userService.addUser("Bob", "bob@example.com");
// Get all users
List<User> users = userService.getAllUsers();
users.forEach(System.out::println);
// Get user by ID
User user = userService.getUserById(1);
System.out.println(user);
}
}
RowMapper
-এর মাধ্যমে জাভা অবজেক্ট এবং ডাটাবেস টেবিলের রো-র মধ্যে ম্যাপিং সহজ হয়।RowMapper
তৈরি করে কোড আরও ক্লিন এবং মেইনটেইনেবল করা যায়।Read more